package com.aasa.siccosap.dao;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.sql.DataSource;

import oracle.jdbc.OracleTypes;
import org.apache.log4j.Logger;
import com.aasa.siccosap.bean.PedidoBean;
import com.aasa.siccosap.util.Constantes;

public class ConsultaPedidoDao  extends ConsultaClienteBaseDAO {

	static Logger logger = Logger.getLogger("ConsultaPedidoDao.class");

	public ConsultaPedidoDao()	throws accesoDaoException {
		super();
	}
	
	public ConsultaPedidoDao(DataSource dataSource) {
		super(dataSource);
	}

	
public ArrayList<PedidoBean> obtenerEstadoPedidos(String codigoCliente, String fechaInicio,
		String fechaFin, String ordenCompra) throws Exception{
		
	  
	ResultSet objL_rs = null;
    this.av_message = null;
    this.storedProcedure = "begin SICCOSPK_PROYECTO.SICCOSSP_CONS_EST_PEDIDO(?,?,?,?,?,?); end;";
    ArrayList<PedidoBean> aobjL_consultaPedido = new ArrayList<PedidoBean>();
    try{
            this.conn = dataSource.getConnection();
            this.stmt = this.conn.prepareCall(storedProcedure);
                          
            configuraParametrosConsultaEstadoPedidos(codigoCliente, fechaInicio,
    				fechaFin, ordenCompra);
            
            this.stmt.execute();

            //Se obtiene la respuesta error/exito del stored
            this.av_message = (String)stmt.getObject(6);
            	
                if(this.av_message.trim().toUpperCase().endsWith(Constantes.NO_ERRORS)){
                    //Se obtiene el objeto del cursor
                	objL_rs = (ResultSet)stmt.getObject(1);
                    while(objL_rs.next()){
                            PedidoBean objL_registroPedido = creaRegistrConsultaPedido(objL_rs);
                            aobjL_consultaPedido.add(objL_registroPedido);
                    }
            }else{
                return null;
            }

            
    }catch (Exception e){
            e.printStackTrace();
            return null;
    }finally{
    		close(this.conn, objL_rs, stmt);
    }
    return aobjL_consultaPedido;
    
    
    
    
}

private CallableStatement configuraParametrosConsultaEstadoPedidos(String codigoCliente, String fechaInicio,
		String fechaFin, String ordenCompra)
throws SQLException{
        	
	              
    stmt.registerOutParameter(1, OracleTypes.CURSOR);
    stmt.setString(2, codigoCliente);
    stmt.setString(3, fechaInicio);	       
    stmt.setString(4,fechaFin);
    stmt.setString(5, ordenCompra);
    stmt.registerOutParameter(6, OracleTypes.VARCHAR); 
   
    return(stmt);          
    
}

private PedidoBean creaRegistrConsultaPedido(ResultSet rs) throws SQLException {
    
    PedidoBean bean = new PedidoBean();
    
   
    bean.setStrPb_numeroPedido(rs.getString("NUMERO_PEDIDO"));
    bean.setStrPb_cliente(rs.getString("CLIENTE"));
    bean.setStrPb_nombreCliente(rs.getString("RAZON_SOCIAL"));
    bean.setIntPb_totalProductos(rs.getInt("TOTAL_PRODUCTOS"));
    bean.setObjPb_fechaFacturacion(rs.getDate("FECHA_FACTURACION"));
    bean.setStrPb_requiereAutorizacion(rs.getString("REQ_AUTORIZACION"));
    bean.setStrPb_Moneda(rs.getString("MONEDA"));
    bean.setDblPb_montoTotal(rs.getDouble("MONTO_TOTAL"));
    bean.setStrPb_confAlmacen(rs.getString("CONF_ALMACEN"));
    bean.setStrPb_estadoPedido(rs.getString("ESTADO_PEDIDO"));
    bean.setStrPb_numeroFactura(rs.getString("NUMERO_FACTURA"));
    bean.setStrPb_numeroOrdenCompra(rs.getString("NUM_OC"));
    bean.setStrPb_tipoOperacion(rs.getString("TIPO_OPERACION"));            
    return (bean);

}

}
